package com.wn.controller;

import com.wn.model.User;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.client.RestTemplate;

import java.util.HashMap;
import java.util.Map;

/**
 * @author yellow Docter
 * @date 2023 -02-20
 * @desc
 */
@RequestMapping("portal")
@RestController
@Slf4j
@Api(tags = "门户测试")
public class PortalController {

    @Autowired
    private RestTemplate restTemplate;

    @GetMapping ("hello")
    public String test() {

        return "portal hello";
    }

    @GetMapping ("{id}")
    public String hello(@PathVariable("id") Integer id) {

        //restTemplate 可以进行远程调用

        //通过url 远程调用拿到  object对象

        //其他的服务的url
        String url = "http://localhost:9100/member/" + id;
        log.info("远程调用 的url:{}",url);

        //String.class 其他的服务的返回结果的类型

        String resultContent = restTemplate.getForObject(url, String.class);

        return "hello:" + resultContent;
    }

    @GetMapping ("/get/{id}/{name}")
    public String get(@PathVariable("id") Integer id,
                      @PathVariable("name") String name) {

        //restTemplate 可以进行远程调用

        //通过url 远程调用拿到  object对象

        //其他的服务的url
        String url = "http://localhost:9100/member/" + id + "/" + name;
        log.info("远程调用 的url:{}",url);

        //String.class 其他的服务的返回结果的类型

        String resultContent = restTemplate.getForObject(url, String.class);
        return "hello:" + resultContent;
    }

    @ApiOperation("post方法提交数据")
    @PostMapping()
    public String post(Integer id,
                       String name) {

        System.out.println("id = " + id);
        System.out.println("name = " + name);
        //restTemplate 可以进行远程调用

        //通过url 远程调用拿到  object对象

        //其他的服务的url
        String url = "http://localhost:9100/member";
        log.info("远程调用 的url:{}",url);

        //String.class 其他的服务的返回结果的类型

        Map<String,Object> map = new HashMap<>();
        map.put("id",id);
        map.put("name",name);
        //post请求
        String s = restTemplate.postForObject(url, map, String.class);
        return "hello:" + s;
    }

    @GetMapping ("{name}/{id}")
    public User getMember(
            @PathVariable("id") String id,
            @PathVariable("name") String name){

        //其他的服务的url
        String url = "http://localhost:9100/member/get/" + name + "/" + id;
        log.info("远程调用 的url:{}",url);

        User user = restTemplate.getForObject(url, User.class);

        return user;
    }

    @ApiOperation("post方法提交数据,返回user对象")
    @PostMapping("/member")
    public User postMember(String id,
                       String name) {
        //restTemplate 可以进行远程调用
        //通过url 远程调用拿到  object对象

        //其他的服务的url
        String url = "http://localhost:9100/member/user";
        log.info("远程调用 的url:{}",url);

        User user = User.builder().id(id).name(name).build();
        //post请求
        //发送的数据是 对象
        //返回结果也是对象
        User u = restTemplate.postForObject(url, user, User.class);

        return u;
    }
}
